#pragma once

#include "Defines.h"
#include "Singleton.h"
#include "Debug.h"
#include "Value.h"
#include <map>

class Settings
{
public:
	Settings(void);
	Settings(const std::string& filename);
	Settings(const Settings& settings);
	~Settings(void);
	
	uint32 GetUint32Value(const std::string& id) const;
	std::string GetStringValue(const std::string& id) const;
	void SetValue(const std::string& id, const Value& value);
	void SetUint32Value(const std::string& id, uint32 value);
	void SetStringValue(const std::string& id, const std::string& value);
	Value GetValue(const std::string& id) const;

	bool Load(const std::string& filename);
	void Save(const std::string& filename);

	const std::map<std::string, uint32>& GetRawUint32Values() const { return m_uint32Values; }
	const std::map<std::string, std::string>& GetRawStringValues() const { return m_stringValues; }
private:
	std::map<std::string, uint32> m_uint32Values;
	std::map<std::string, std::string> m_stringValues;

};
